home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Text⁄Files / File List 14 / Init.c < prev    next >
Text File  |  1990-09-14  |  6KB  |  252 lines

  1. /*
  2.     FileList 1.4
  3.     "Init.c"
  4. */
  5.  
  6. #include "Main.h"
  7. #include "Window.h"
  8. #include "File.h"
  9. #include "Options.h"
  10. #include "Stack.h"
  11. #include "Search.h"
  12. #include "Utilities.h"
  13. #include "Init.h"
  14. #include <FontMgr.h>
  15.  
  16. /* ----- Init the Mac -------------------------------------------------- */
  17.  
  18. static void InitMac (void)
  19. {
  20.     register short i;
  21.     pascal void Crash (void);
  22.  
  23.     for (i = 0; i < 5; i++)
  24.         MoreMasters();
  25.     InitGraf(&thePort);
  26.     InitFonts();
  27.     InitWindows();
  28.     InitMenus();
  29.     TEInit();
  30.     InitDialogs(Crash);
  31.     FlushEvents(everyEvent, 0);
  32. }
  33.  
  34. /* ----- Init the menus ------------------------------------------------ */
  35.  
  36. static void SetupMenus (void)
  37. {    
  38.     AppleM = GetMenu(AppleMenu);
  39.     AddResMenu(AppleM, 'DRVR');
  40.     InsertMenu(AppleM, 0);
  41.     InsertMenu(FileM = GetMenu(FileMenu), 0);
  42.     InsertMenu(EditM = GetMenu(EditMenu), 0);
  43.     InsertMenu(VolumeM = GetMenu(VolumeMenu), 0);
  44.     InsertMenu(FileData.sortmenu = GetMenu(FSortMenu), 0);
  45.     InsertMenu(VolumeData.sortmenu = GetMenu(VSortMenu), 0);
  46.     CheckItem(VolumeM, vAuto, Automatic);
  47.     DrawMenuBar();
  48. }
  49.  
  50. /* ----- Find volume reference number ---------------------------------- */
  51.  
  52. static short ParentVolume (
  53.     register short volume)    /* Use 0 for default volume */
  54. {
  55.     HVolumeParam p;
  56.  
  57.     p.ioCompletion = 0;
  58.     p.ioVolIndex = 0;
  59.     p.ioNamePtr = 0;
  60.     p.ioVRefNum = volume;
  61.     if ((!volume && PBGetVol(&p, FALSE)) || PBHGetVInfo(&p, FALSE))
  62.         ExitToShell();
  63.     return p.ioVRefNum;
  64. }
  65.  
  66. /* ----- Check system environment -------------------------------------- */
  67.  
  68. #define    WNETrapNum        0x60    /* Trap number of WaitNextEvent() */
  69. #define    UnImplTrapNum    0x9F    /* Trap number "unimplemented trap" */
  70.  
  71. static void CheckSystem (void)
  72. {
  73.     SysEnvRec theWorld;
  74.  
  75.     Bounds = screenBits.bounds;
  76.     if (SysEnvirons(1, &theWorld) || theWorld.machineType < 0) {
  77.         Bounds.top += 20;
  78.         Message(ERR_OLD, 0);
  79.         ExitToShell();
  80.     }
  81.     SysVol = ParentVolume(SysVRefNum = theWorld.sysVRefNum);
  82.     ApplVol = ParentVolume(0);
  83.     Bounds.top += MBarHeight;
  84.     WNE = NGetTrapAddress(WNETrapNum, ToolTrap) !=
  85.         NGetTrapAddress(UnImplTrapNum, ToolTrap);
  86. }
  87.  
  88. /* ----- Open new list ------------------------------------------------- */
  89.  
  90. #define FONT_NUMBER    monaco
  91. #define FONT_SIZE    9
  92.  
  93. static void NewList (register WindowDataPtr p)
  94. {
  95.     FontInfo info;
  96.     Rect r;
  97.     
  98.     p->count = p->sorted = p->vrefnum = p->type = p->creator = 0;
  99.     p->find[0] = 0;
  100.     p->match = StrBegins;
  101.  
  102.     NewWindow(p, &p->rectangle, EmptyStr, FALSE, 8, -1L, TRUE, 0L);
  103.     SetPort(p);
  104.     TextFont(FONT_NUMBER);
  105.     TextSize(FONT_SIZE);
  106.     GetFontInfo(&info);
  107.     /* info.widMax = CharWidth('M'); */    /* info.widMax not always correct */
  108.     p->descent = info.descent;
  109.     p->height = info.ascent + info.descent + info.leading;
  110.     p->width = info.widMax;
  111.  
  112.     WPortRect(p->height, p->width, &p->rectangle);
  113.     r = p->rectangle;
  114.     SizeWindow(p, r.right - r.left, r.bottom - r.top, TRUE);
  115.     WPortRect(p->height, p->width,
  116.         &((WStateData *)*((WindowPeek)p)->dataHandle)->stdState);
  117.  
  118.     VScrollRect((WindowPtr)p, &r);
  119.     p->vs = NewControl(p,&r,EmptyStr,TRUE,0,0,0,scrollBarProc,0L);
  120.     HScrollRect((WindowPtr)p, &r);
  121.     p->hs = NewControl(p,&r,EmptyStr,TRUE,0,0,0,scrollBarProc,0L);
  122.  
  123.     NewTitle(p);
  124.     ShowWindow(p);
  125. }
  126.  
  127. /* ----- Check application parameters ---------------------------------- */
  128.  
  129. static void CheckApplParms (void)
  130. {
  131.     register short i;
  132.     short message, count;
  133.     AppFile file;
  134.  
  135.     CountAppFiles(&message, &count);
  136.     if (!count)
  137.         return;
  138.     for (i = 1; i <= count; i++){
  139.         GetAppFiles (i, &file);
  140.         if (file.fType != Creator)
  141.             continue;
  142.         Read(file.vRefNum, file.fName);
  143.         Update();
  144.         if (FileData.sorted)
  145.             CheckItem(FileData.sortmenu, FileData.sorted, TRUE);
  146.         if (VolumeData.sorted)
  147.             CheckItem(VolumeData.sortmenu, VolumeData.sorted, TRUE);
  148.         return;
  149.     }
  150. }
  151.  
  152. /* ----- Get parameters ------------------------------------------------ */
  153.  
  154. static void GetParm (void)
  155. {
  156.     register short err;
  157.     register StringHandle str;
  158.     short r;
  159.     long count;
  160.     Parameter parm;
  161.     Rect bounds;
  162.  
  163.     err = 1;
  164.     if (str = GetString(OPTION_FILE)) {
  165.         HLock(str);
  166.         err = FSOpen(*str, SysVRefNum, &r);
  167.         HUnlock(str);
  168.         if (!err) {
  169.             count = sizeof(Parameter);
  170.             err = FSRead(r, &count, &parm);
  171.             FSClose(r);
  172.             if (count != sizeof(Parameter) || parm.version != VERSION)
  173.                 err = 1;
  174.         }
  175.     }
  176.     if (err) {
  177.         parm.heap = 0x8000L;
  178.         parm.volumes = 3;        /* 3 % of records are volumes */
  179.         parm.files = 86;        /* 86 % of records are files */
  180.         parm.name = 12;            /* Average name size is 12 bytes */
  181.         parm.date = 0;
  182.         parm.automatic = 0;
  183.         parm.stuffit = 0;
  184.         parm.compactor = 0;
  185.         parm.tabs = 0;
  186.         bounds = Bounds;
  187.         bounds.top += 20;
  188.         parm.vwindow = bounds;
  189.         parm.fwindow = bounds;
  190.     }
  191.     if (NewMemory(parm.heap, parm.files, parm.volumes, parm.name)) {
  192.         Message(ERR_MEMORY, 0);
  193.         ExitToShell();
  194.     }
  195.     VolumeData.rectangle = parm.vwindow;
  196.     FileData.rectangle = parm.fwindow;
  197.     DFormat1(parm.date);
  198.     Automatic = parm.automatic;
  199.     Tabs = parm.tabs;
  200.     Stuffit = parm.stuffit;
  201.     Compactor = parm.compactor;
  202. }
  203.  
  204. /* ----- Initializations ----------------------------------------------- */
  205.  
  206. void Init (void)
  207. {
  208.     void FileToString1(), FileToString2();
  209.     void SortFiles();
  210.     void VolumeToString1(), VolumeToString2();
  211.     void SortVolumes();
  212.  
  213.     InitMac();
  214.     CheckSystem();
  215.     GetParm();
  216.     SetupMenus();
  217.  
  218.     notQuiting = TRUE;
  219.     BlockMove(*GetString(CREATOR) + 1, &Creator, 4L);
  220.     BlockMove(*GetString(OPTIONS) + 1, &Options, 4L);
  221.     BlockMove(*GetString(TEXT_CREATOR) + 1, &TextCreator, 4L);
  222.     VolumeData.redraw = VolumeToString1;
  223.     FileData.redraw = FileToString1;
  224.     if (Tabs) {
  225.         VolumeData.string = VolumeToString2;
  226.         FileData.string = FileToString2;
  227.     } else {
  228.         VolumeData.string = VolumeToString1;
  229.         FileData.string = FileToString1;
  230.     }
  231.     VolumeData.sort = SortVolumes;
  232.     FileData.sort = SortFiles;
  233.     VolumeData.title = TITLE_VOLUMES;
  234.     FileData.title = TITLE_FILES;
  235.     VolumeData.header = HEADER_VOLUMES;
  236.     FileData.header = HEADER_FILES;
  237.     VolumeData.maxsort = VSORT_MAX;
  238.     FileData.maxsort = FSORT_MAX;
  239.     VolumeData.columns = 90;
  240.     FileData.columns = 255;
  241.     VolumeData.select = FileData.select = -1L;
  242.     InfoCount = InfoSize = 0L;
  243.     Dirty = FALSE;
  244.     VrefNum = 0;
  245.  
  246.     NewList(&VolumeData);
  247.     NewList(&FileData);
  248.  
  249.     CheckApplParms();
  250.     InitCursor();
  251. }
  252.